home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / plaf / basic / BasicScrollBarUI.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  11.5 KB  |  478 lines

  1. package javax.swing.plaf.basic;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Component;
  5. import java.awt.Container;
  6. import java.awt.Dimension;
  7. import java.awt.Graphics;
  8. import java.awt.Insets;
  9. import java.awt.LayoutManager;
  10. import java.awt.Rectangle;
  11. import java.beans.PropertyChangeListener;
  12. import javax.swing.JButton;
  13. import javax.swing.JComponent;
  14. import javax.swing.JScrollBar;
  15. import javax.swing.LookAndFeel;
  16. import javax.swing.SwingConstants;
  17. import javax.swing.Timer;
  18. import javax.swing.UIManager;
  19. import javax.swing.plaf.ComponentUI;
  20. import javax.swing.plaf.ScrollBarUI;
  21.  
  22. public class BasicScrollBarUI extends ScrollBarUI implements LayoutManager, SwingConstants {
  23.    protected Dimension minimumThumbSize;
  24.    protected Dimension maximumThumbSize;
  25.    protected Color thumbHighlightColor;
  26.    protected Color thumbLightShadowColor;
  27.    protected Color thumbDarkShadowColor;
  28.    protected Color thumbColor;
  29.    protected Color trackColor;
  30.    protected Color trackHighlightColor;
  31.    protected JScrollBar scrollbar;
  32.    protected JButton incrButton;
  33.    protected JButton decrButton;
  34.    protected boolean isDragging;
  35.    protected TrackListener trackListener;
  36.    protected ArrowButtonListener buttonListener;
  37.    protected ModelListener modelListener;
  38.    protected Rectangle thumbRect;
  39.    protected Rectangle trackRect;
  40.    protected int trackHighlight;
  41.    protected static final int NO_HIGHLIGHT = 0;
  42.    protected static final int DECREASE_HIGHLIGHT = 1;
  43.    protected static final int INCREASE_HIGHLIGHT = 2;
  44.    protected ScrollListener scrollListener;
  45.    protected PropertyChangeListener propertyChangeListener;
  46.    protected Timer scrollTimer;
  47.    private static final int scrollSpeedThrottle = 60;
  48.  
  49.    public void addLayoutComponent(String var1, Component var2) {
  50.    }
  51.  
  52.    protected void configureScrollBarColors() {
  53.       this.thumbHighlightColor = UIManager.getColor("ScrollBar.thumbHighlight");
  54.       this.thumbLightShadowColor = UIManager.getColor("ScrollBar.thumbLightShadow");
  55.       this.thumbDarkShadowColor = UIManager.getColor("ScrollBar.thumbDarkShadow");
  56.       this.thumbColor = UIManager.getColor("ScrollBar.thumb");
  57.       this.trackColor = UIManager.getColor("ScrollBar.track");
  58.       this.trackHighlightColor = UIManager.getColor("ScrollBar.trackHighlight");
  59.    }
  60.  
  61.    protected ArrowButtonListener createArrowButtonListener() {
  62.       return new ArrowButtonListener(this);
  63.    }
  64.  
  65.    protected JButton createDecreaseButton(int var1) {
  66.       return new BasicArrowButton(var1);
  67.    }
  68.  
  69.    protected JButton createIncreaseButton(int var1) {
  70.       return new BasicArrowButton(var1);
  71.    }
  72.  
  73.    protected ModelListener createModelListener() {
  74.       return new ModelListener(this);
  75.    }
  76.  
  77.    protected PropertyChangeListener createPropertyChangeListener() {
  78.       return new PropertyChangeHandler(this);
  79.    }
  80.  
  81.    protected ScrollListener createScrollListener() {
  82.       return new ScrollListener(this);
  83.    }
  84.  
  85.    protected TrackListener createTrackListener() {
  86.       return new TrackListener(this);
  87.    }
  88.  
  89.    public static ComponentUI createUI(JComponent var0) {
  90.       return new BasicScrollBarUI();
  91.    }
  92.  
  93.    public Dimension getMaximumSize(JComponent var1) {
  94.       return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE);
  95.    }
  96.  
  97.    protected Dimension getMaximumThumbSize() {
  98.       return this.maximumThumbSize;
  99.    }
  100.  
  101.    public Dimension getMinimumSize(JComponent var1) {
  102.       return this.getPreferredSize(var1);
  103.    }
  104.  
  105.    protected Dimension getMinimumThumbSize() {
  106.       return this.minimumThumbSize;
  107.    }
  108.  
  109.    public Dimension getPreferredSize(JComponent var1) {
  110.       return this.scrollbar.getOrientation() == 1 ? new Dimension(16, 48) : new Dimension(48, 16);
  111.    }
  112.  
  113.    protected Rectangle getThumbBounds() {
  114.       return this.thumbRect;
  115.    }
  116.  
  117.    protected Rectangle getTrackBounds() {
  118.       return this.trackRect;
  119.    }
  120.  
  121.    protected void installComponents() {
  122.    }
  123.  
  124.    protected void installDefaults() {
  125.       this.minimumThumbSize = (Dimension)UIManager.get("ScrollBar.minimumThumbSize");
  126.       this.maximumThumbSize = (Dimension)UIManager.get("ScrollBar.maximumThumbSize");
  127.       this.trackHighlight = 0;
  128.       switch (this.scrollbar.getOrientation()) {
  129.          case 0:
  130.             this.incrButton = this.createIncreaseButton(3);
  131.             this.decrButton = this.createDecreaseButton(7);
  132.             break;
  133.          case 1:
  134.             this.incrButton = this.createIncreaseButton(5);
  135.             this.decrButton = this.createDecreaseButton(1);
  136.       }
  137.  
  138.       this.scrollbar.setLayout(this);
  139.       this.scrollbar.add(this.incrButton);
  140.       this.scrollbar.add(this.decrButton);
  141.       this.scrollbar.setEnabled(this.scrollbar.isEnabled());
  142.       this.scrollbar.setOpaque(true);
  143.       this.configureScrollBarColors();
  144.       LookAndFeel.installBorder(this.scrollbar, "ScrollBar.border");
  145.    }
  146.  
  147.    protected void installKeyboardActions() {
  148.    }
  149.  
  150.    protected void installListeners() {
  151.       this.trackListener = this.createTrackListener();
  152.       this.buttonListener = this.createArrowButtonListener();
  153.       this.modelListener = this.createModelListener();
  154.       this.propertyChangeListener = this.createPropertyChangeListener();
  155.       this.scrollbar.addMouseListener(this.trackListener);
  156.       this.scrollbar.addMouseMotionListener(this.trackListener);
  157.       this.scrollbar.getModel().addChangeListener(this.modelListener);
  158.       this.scrollbar.addPropertyChangeListener(this.propertyChangeListener);
  159.       if (this.incrButton != null) {
  160.          this.incrButton.addMouseListener(this.buttonListener);
  161.       }
  162.  
  163.       if (this.decrButton != null) {
  164.          this.decrButton.addMouseListener(this.buttonListener);
  165.       }
  166.  
  167.       this.scrollListener = this.createScrollListener();
  168.       this.scrollTimer = new Timer(60, this.scrollListener);
  169.       this.scrollTimer.setInitialDelay(300);
  170.    }
  171.  
  172.    public void installUI(JComponent var1) {
  173.       this.scrollbar = (JScrollBar)var1;
  174.       this.thumbRect = new Rectangle(0, 0, 0, 0);
  175.       this.trackRect = new Rectangle(0, 0, 0, 0);
  176.       this.installDefaults();
  177.       this.installComponents();
  178.       this.installListeners();
  179.       this.installKeyboardActions();
  180.    }
  181.  
  182.    public void layoutContainer(Container var1) {
  183.       if (!this.isDragging) {
  184.          JScrollBar var2 = (JScrollBar)var1;
  185.          switch (var2.getOrientation()) {
  186.             case 0:
  187.                this.layoutHScrollbar(var2);
  188.                break;
  189.             case 1:
  190.                this.layoutVScrollbar(var2);
  191.          }
  192.  
  193.       }
  194.    }
  195.  
  196.    protected void layoutHScrollbar(JScrollBar var1) {
  197.       Dimension var2 = ((Component)var1).getSize();
  198.       Insets var3 = ((JComponent)var1).getInsets();
  199.       int var4 = var2.height - (var3.top + var3.bottom);
  200.       int var5 = var3.top;
  201.       int var6 = this.decrButton.getPreferredSize().width;
  202.       int var7 = var3.left;
  203.       int var8 = this.incrButton.getPreferredSize().width;
  204.       int var9 = var2.width - (var3.right + var8);
  205.       int var10 = var3.left + var3.right;
  206.       int var11 = var6 + var8;
  207.       float var12 = (float)(var2.width - (var10 + var11));
  208.       float var13 = (float)var1.getMinimum();
  209.       float var14 = (float)var1.getVisibleAmount();
  210.       float var15 = (float)var1.getMaximum() - var13;
  211.       float var16 = (float)var1.getValue();
  212.       int var17 = var15 <= 0.0F ? this.getMaximumThumbSize().width : (int)(var12 * (var14 / var15));
  213.       var17 = Math.max(var17, this.getMinimumThumbSize().width);
  214.       var17 = Math.min(var17, this.getMaximumThumbSize().width);
  215.       int var18 = var9 - var17;
  216.       if (var1.getValue() < var1.getMaximum() - var1.getVisibleAmount()) {
  217.          float var19 = var12 - (float)var17;
  218.          var18 = (int)(0.5F + var19 * ((var16 - var13) / (var15 - var14)));
  219.          var18 += var7 + var6;
  220.       }
  221.  
  222.       int var25 = var2.width - var10;
  223.       if (var25 < var11) {
  224.          var8 = var6 = var25 / 2;
  225.          var9 = var2.width - (var3.right + var8);
  226.       }
  227.  
  228.       this.decrButton.setBounds(var7, var5, var6, var4);
  229.       this.incrButton.setBounds(var9, var5, var8, var4);
  230.       int var20 = var7 + var6;
  231.       int var21 = var9 - var20;
  232.       this.trackRect.setBounds(var20, var5, var21, var4);
  233.       if (var17 >= (int)var12) {
  234.          this.setThumbBounds(0, 0, 0, 0);
  235.       } else {
  236.          if (var18 + var17 > var9) {
  237.             var18 = var9 - var17;
  238.          }
  239.  
  240.          if (var18 < var7 + var6) {
  241.             var18 = var7 + var6 + 1;
  242.          }
  243.  
  244.          this.setThumbBounds(var18, var5, var17, var4);
  245.       }
  246.  
  247.    }
  248.  
  249.    protected void layoutVScrollbar(JScrollBar var1) {
  250.       Dimension var2 = ((Component)var1).getSize();
  251.       Insets var3 = ((JComponent)var1).getInsets();
  252.       int var4 = var2.width - (var3.left + var3.right);
  253.       int var5 = var3.left;
  254.       int var6 = this.decrButton.getPreferredSize().height;
  255.       int var7 = var3.top;
  256.       int var8 = this.incrButton.getPreferredSize().height;
  257.       int var9 = var2.height - (var3.bottom + var8);
  258.       int var10 = var3.top + var3.bottom;
  259.       int var11 = var6 + var8;
  260.       float var12 = (float)(var2.height - (var10 + var11));
  261.       float var13 = (float)var1.getMinimum();
  262.       float var14 = (float)var1.getVisibleAmount();
  263.       float var15 = (float)var1.getMaximum() - var13;
  264.       float var16 = (float)var1.getValue();
  265.       int var17 = var15 <= 0.0F ? this.getMaximumThumbSize().height : (int)(var12 * (var14 / var15));
  266.       var17 = Math.max(var17, this.getMinimumThumbSize().height);
  267.       var17 = Math.min(var17, this.getMaximumThumbSize().height);
  268.       int var18 = var9 - var17;
  269.       if (var1.getValue() < var1.getMaximum() - var1.getVisibleAmount()) {
  270.          float var19 = var12 - (float)var17;
  271.          var18 = (int)(0.5F + var19 * ((var16 - var13) / (var15 - var14)));
  272.          var18 += var7 + var6;
  273.       }
  274.  
  275.       int var25 = var2.height - var10;
  276.       if (var25 < var11) {
  277.          var8 = var6 = var25 / 2;
  278.          var9 = var2.height - (var3.bottom + var8);
  279.       }
  280.  
  281.       this.decrButton.setBounds(var5, var7, var4, var6);
  282.       this.incrButton.setBounds(var5, var9, var4, var8);
  283.       int var20 = var7 + var6;
  284.       int var21 = var9 - var20;
  285.       this.trackRect.setBounds(var5, var20, var4, var21);
  286.       if (var17 >= (int)var12) {
  287.          this.setThumbBounds(0, 0, 0, 0);
  288.       } else {
  289.          if (var18 + var17 > var9) {
  290.             var18 = var9 - var17;
  291.          }
  292.  
  293.          if (var18 < var7 + var6) {
  294.             var18 = var7 + var6 + 1;
  295.          }
  296.  
  297.          this.setThumbBounds(var5, var18, var4, var17);
  298.       }
  299.  
  300.    }
  301.  
  302.    public Dimension minimumLayoutSize(Container var1) {
  303.       return this.getMinimumSize((JComponent)var1);
  304.    }
  305.  
  306.    public void paint(Graphics var1, JComponent var2) {
  307.       this.paintTrack(var1, var2, this.getTrackBounds());
  308.       this.paintThumb(var1, var2, this.getThumbBounds());
  309.    }
  310.  
  311.    protected void paintDecreaseHighlight(Graphics var1) {
  312.       Insets var2 = this.scrollbar.getInsets();
  313.       Rectangle var3 = this.getThumbBounds();
  314.       var1.setColor(this.trackHighlightColor);
  315.       if (this.scrollbar.getOrientation() == 1) {
  316.          int var4 = var2.left;
  317.          int var5 = this.decrButton.getY() + this.decrButton.getHeight();
  318.          int var6 = this.scrollbar.getWidth() - (var2.left + var2.right);
  319.          int var7 = var3.y - var5;
  320.          var1.fillRect(var4, var5, var6, var7);
  321.       } else {
  322.          int var8 = this.decrButton.getX() + this.decrButton.getHeight();
  323.          int var9 = var2.top;
  324.          int var10 = var3.x - var8;
  325.          int var11 = this.scrollbar.getHeight() - (var2.top + var2.bottom);
  326.          var1.fillRect(var8, var9, var10, var11);
  327.       }
  328.  
  329.    }
  330.  
  331.    protected void paintIncreaseHighlight(Graphics var1) {
  332.       Insets var2 = this.scrollbar.getInsets();
  333.       Rectangle var3 = this.getThumbBounds();
  334.       var1.setColor(this.trackHighlightColor);
  335.       if (this.scrollbar.getOrientation() == 1) {
  336.          int var4 = var2.left;
  337.          int var5 = var3.y + var3.height;
  338.          int var6 = this.scrollbar.getWidth() - (var2.left + var2.right);
  339.          int var7 = this.incrButton.getY() - var5;
  340.          var1.fillRect(var4, var5, var6, var7);
  341.       } else {
  342.          int var8 = var3.x + var3.width;
  343.          int var9 = var2.top;
  344.          int var10 = this.incrButton.getX() - var8;
  345.          int var11 = this.scrollbar.getHeight() - (var2.top + var2.bottom);
  346.          var1.fillRect(var8, var9, var10, var11);
  347.       }
  348.  
  349.    }
  350.  
  351.    protected void paintThumb(Graphics var1, JComponent var2, Rectangle var3) {
  352.       if (!var3.isEmpty() && this.scrollbar.isEnabled()) {
  353.          int var4 = var3.width;
  354.          int var5 = var3.height;
  355.          var1.translate(var3.x, var3.y);
  356.          var1.setColor(this.thumbDarkShadowColor);
  357.          var1.drawRect(0, 0, var4 - 1, var5 - 1);
  358.          var1.setColor(this.thumbColor);
  359.          var1.fillRect(0, 0, var4 - 1, var5 - 1);
  360.          var1.setColor(this.thumbHighlightColor);
  361.          var1.drawLine(1, 1, 1, var5 - 2);
  362.          var1.drawLine(2, 1, var4 - 3, 1);
  363.          var1.setColor(this.thumbLightShadowColor);
  364.          var1.drawLine(2, var5 - 2, var4 - 2, var5 - 2);
  365.          var1.drawLine(var4 - 2, 1, var4 - 2, var5 - 3);
  366.          var1.translate(-var3.x, -var3.y);
  367.       }
  368.    }
  369.  
  370.    protected void paintTrack(Graphics var1, JComponent var2, Rectangle var3) {
  371.       var1.setColor(this.trackColor);
  372.       var1.fillRect(var3.x, var3.y, var3.width, var3.height);
  373.       if (this.trackHighlight == 1) {
  374.          this.paintDecreaseHighlight(var1);
  375.       } else if (this.trackHighlight == 2) {
  376.          this.paintIncreaseHighlight(var1);
  377.       }
  378.  
  379.    }
  380.  
  381.    public Dimension preferredLayoutSize(Container var1) {
  382.       return this.getPreferredSize((JComponent)var1);
  383.    }
  384.  
  385.    public void removeLayoutComponent(Component var1) {
  386.    }
  387.  
  388.    protected void scrollByBlock(int var1) {
  389.       JScrollBar var2 = this.scrollbar;
  390.       synchronized(var2){}
  391.  
  392.       try {
  393.          int var4 = this.scrollbar.getValue();
  394.          int var5 = this.scrollbar.getBlockIncrement(var1);
  395.          int var6 = var5 * (var1 > 0 ? 1 : -1);
  396.          this.scrollbar.setValue(var4 + var6);
  397.          this.trackHighlight = var1 > 0 ? 2 : 1;
  398.          Rectangle var7 = this.getTrackBounds();
  399.          this.scrollbar.repaint(var7.x, var7.y, var7.width, var7.height);
  400.       } catch (Throwable var9) {
  401.          throw var9;
  402.       }
  403.  
  404.    }
  405.  
  406.    protected void scrollByUnit(int var1) {
  407.       JScrollBar var2 = this.scrollbar;
  408.       synchronized(var2){}
  409.  
  410.       try {
  411.          int var4;
  412.          if (var1 > 0) {
  413.             var4 = this.scrollbar.getUnitIncrement(var1);
  414.          } else {
  415.             var4 = -this.scrollbar.getUnitIncrement(var1);
  416.          }
  417.  
  418.          this.scrollbar.setValue(var4 + this.scrollbar.getValue());
  419.       } catch (Throwable var6) {
  420.          throw var6;
  421.       }
  422.  
  423.    }
  424.  
  425.    protected void setThumbBounds(int var1, int var2, int var3, int var4) {
  426.       if (this.thumbRect.x != var1 || this.thumbRect.y != var2 || this.thumbRect.width != var3 || this.thumbRect.height != var4) {
  427.          int var5 = Math.min(var1, this.thumbRect.x);
  428.          int var6 = Math.min(var2, this.thumbRect.y);
  429.          int var7 = Math.max(var1 + var3, this.thumbRect.x + this.thumbRect.width);
  430.          int var8 = Math.max(var2 + var4, this.thumbRect.y + this.thumbRect.height);
  431.          this.thumbRect.setBounds(var1, var2, var3, var4);
  432.          this.scrollbar.repaint(var5, var6, var7 - var5, var8 - var6);
  433.       }
  434.    }
  435.  
  436.    protected void uninstallComponents() {
  437.    }
  438.  
  439.    protected void uninstallDefaults() {
  440.       LookAndFeel.uninstallBorder(this.scrollbar);
  441.    }
  442.  
  443.    protected void uninstallKeyboardActions() {
  444.    }
  445.  
  446.    protected void uninstallListeners() {
  447.       this.scrollTimer.stop();
  448.       this.scrollTimer = null;
  449.       if (this.decrButton != null) {
  450.          this.decrButton.removeMouseListener(this.buttonListener);
  451.       }
  452.  
  453.       if (this.incrButton != null) {
  454.          this.incrButton.removeMouseListener(this.buttonListener);
  455.       }
  456.  
  457.       this.scrollbar.getModel().removeChangeListener(this.modelListener);
  458.       this.scrollbar.removeMouseListener(this.trackListener);
  459.       this.scrollbar.removeMouseMotionListener(this.trackListener);
  460.       this.scrollbar.removePropertyChangeListener(this.propertyChangeListener);
  461.    }
  462.  
  463.    public void uninstallUI(JComponent var1) {
  464.       this.scrollbar = (JScrollBar)var1;
  465.       this.uninstallDefaults();
  466.       this.uninstallComponents();
  467.       this.uninstallListeners();
  468.       this.uninstallKeyboardActions();
  469.       ((Container)var1).remove(this.incrButton);
  470.       ((Container)var1).remove(this.decrButton);
  471.       ((Container)var1).setLayout((LayoutManager)null);
  472.       this.thumbRect = null;
  473.       this.scrollbar = null;
  474.       this.incrButton = null;
  475.       this.decrButton = null;
  476.    }
  477. }
  478.